#ifndef DATA_H
#define DATA_H

#include <QDateTime>
#include <QList>
#include <QString>
#include <tuple>

struct Mission
{
    int id;                                         // 任务ID
    QString brief;                                  // 任务简介
    QString code;                                   // 任务代号
    QString mark;                                   // 任务标志
    QString rocketModel;                            // 火箭型号
    QString coordinate;                             // 坐标系
    QString method;                                 // 通信方式
    QString launchPoint;                            // 发射点
    double launchAzimuth;                           // 发射方位角
    double launchLongitude;                         // 发射点经度
    double launchLatitude;                          // 发射点纬度
    double launchAltitude;                          // 发射点高度（海拔）
    QDateTime launchTime;                           // 发射时间
    QList<std::tuple<QString, double>> uniquePoint; // 特征点 [{参数名称, 装订值}, ...]
    QList<std::tuple<QString, QString, double, double>>
        taskSegment; // 任务段 [{设备站点, 设备名称, 开始时间, 结束时间}, ...]

    explicit Mission(int id,
                     const QString& brief,
                     const QString& code,
                     const QString& mark,
                     const QString& rocketModel,
                     const QString& coordinate,
                     const QString& method,
                     const QString& launchPoint,
                     double launchAzimuth,
                     double launchLongitude,
                     double launchLatitude,
                     double launchAltitude,
                     QDateTime launchTime,
                     const QList<std::tuple<QString, double>>& uniquePoint = {},
                     const QList<std::tuple<QString, QString, double, double>>& taskSegment = {});
};

struct Station
{
    QString name;     // 站点名称
    double longitude; // 站点经度
    double latitude;  // 站点纬度

    explicit Station(const QString& name, double longitude, double latitude);
};

struct EquipmentData
{
    QString equipmentName; // 设备名称
    QString stationName;   // 站点名称
    double T;              // 相对时间
    double A;              // 方位角
    double E;              // 俯仰角
    double AGC;            // 电平
    double SNR;            // 信噪比

    explicit EquipmentData(const QString& equipmentName,
                           const QString& stationName,
                           double T,
                           double A,
                           double E,
                           double AGC,
                           double SNR);
};

struct Data
{
    static int currentMissionId;

    const static QList<Mission> missions;
    const static QList<Station> stations;
    const static QList<EquipmentData> equipmentData;
};

#endif // DATA_H
